import os

from django.conf import settings
from django.template import loader

from celery_task.main import app
from meiduo.apps.goods.utils import get_categories, get_goods_and_spec


# ========定义一个函数，实现渲染sku商品详情页面===========
@app.task(name='generate_static_sku_detail_html')
def generate_static_sku_detail_html(sku_id):
    """
    异步任务：生成静态商品详情页面
    :param sku_id: 商品id
    :return:
    """
    categories = get_categories()  # 获取分组频道数据
    goods, sku, specs = get_goods_and_spec(sku_id)  # 获取商品所属分类，当前商品，商品规格

    # =================模版渲染===================
    context = {  # 构建模版参数
        'categories': categories,  # 用于构建详情页面商品频道
        'goods': goods,  # 当前sku商品的spu商品（Goods模型类）
        'sku': sku,
        'specs': specs  # 传入的是当前sku商品从属的spu拥有的规格及其选项
    }
    template = loader.get_template('detail.html')  # 获取模版
    sku_html_text = template.render(context=context)  # 调用模版渲染函数，获得完整的html页面
    file_path = os.path.join(  # 拼接html文件的存储路径
        settings.GENERATED_STATIC_HTML_FILES_DIR,
        'goods/' + str(sku_id) + '.html'  # goods/16.html
    )
    with open(file_path, 'w') as f:  # html页面写入到文件
        f.write(sku_html_text)
